# 数据分析题目解答(建议先赞后看，养成习惯 如果不赞，先拉出去枪毙两分钟 作者：小匠IT)
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import os
from openpyxl import load_workbook
from openpyxl.drawing.image import Image

# 设置中文字体路径（请根据实际路径调整）
font_path = r'fonts/SIMSUN.TTC'
font_prop = FontProperties(fname=font_path)

# 创建输出文件夹
output_folder = r'output/40'
os.makedirs(output_folder, exist_ok=True)

# 给定的数据
data_daily = {
    '统计时间': ['3/9', '3/10', '3/11', '3/12', '3/13', '3/14', '3/15', '3/16', '3/17', '3/18', '3/19', '3/20', '3/21', '3/22', '3/23', '3/24', '3/25', '3/26', '3/27', '3/28', '3/29', '3/30', '3/31', '4/1', '4/2', '4/3', '4/4', '4/5', '4/6', '4/7'],
    '搜索人气': [5182, 4968, 5010, 5115, 4942, 4832, 4766, 4801, 5202, 4808, 4792, 4570, 4637, 4646, 4663, 4847, 5302, 5760, 5012, 4894, 5168, 5014, 4995, 4660, 4786, 4724, 5101, 4702, 4941, 4849],
    '搜索热度': [11418, 11362, 11563, 11642, 10968, 10665, 10858, 10687, 11051, 10473, 10599, 10362, 10742, 11187, 10558, 10613, 11898, 12905, 11123, 10771, 11379, 10636, 11027, 10228, 10696, 10362, 11210, 10780, 11418, 10524]
}

# 分离人口统计数据
data_cities = {
    '城市': ['广州市', '南昌市', '苏州市', '佛山市', '东莞市', '成都市', '厦门市', '贵阳市', '泉州市', '昆明市', '宁波市', '南京市', '北京市', '武汉市', '金华市', '杭州市', '福州市', '温州市', '济南市', '上海市', '天津市', '长沙市', '深圳市', '南宁市', '青岛市', '郑州市', '无锡市', '重庆市', '合肥市', '西安市'],
    '搜索人气': [4603, 2551, 2620, 2061, 2827, 4975, 2437, 2696, 1774, 3186, 2225, 3311, 5504, 4236, 2341, 5979, 2660, 1799, 2108, 6135, 2351, 3542, 5047, 2448, 2023, 2868, 1977, 4863, 3372, 3098]
}

data_gender_age = {
    '性别': ['女', '男', '未知'],
    '搜索人气': [21237, 21714, 4006],
    '年龄段': ['18-24', '25-29', '30-34', '35-39', '40-49', '>=50'],
    '搜索人气_年龄段': [11133, 14380, 13967, 10510, 10773, 6962]
}

# 创建 DataFrame
df_daily = pd.DataFrame(data_daily)
df_cities = pd.DataFrame(data_cities)

# 处理性别和年龄段数据，因为这两个维度的数据是分开的，我们需要创建两个独立的DataFrame
df_gender = pd.DataFrame({
    '性别': data_gender_age['性别'],
    '搜索人气': data_gender_age['搜索人气']
})

df_age = pd.DataFrame({
    '年龄段': data_gender_age['年龄段'],
    '搜索人气': data_gender_age['搜索人气_年龄段']
})

# 打印数据框的前几行，确认数据是否正确加载
print("每日数据框前几行：")
print(df_daily.head())
print("城市数据框前几行：")
print(df_cities.head())
print("性别数据框前几行：")
print(df_gender.head())
print("年龄段数据框前几行：")
print(df_age.head())

# 生成图表：绘制搜索词“土鸡”近30天的搜索人气和搜索热度的二维折线图
plt.figure(figsize=(10, 6))
plt.plot(df_daily['统计时间'], df_daily['搜索人气'], marker='o', label='搜索人气')
plt.plot(df_daily['统计时间'], df_daily['搜索热度'], marker='s', label='搜索热度')
plt.xlabel('日期', fontproperties=font_prop)
plt.ylabel('数量', fontproperties=font_prop)
plt.title('搜索词“土鸡”近30天的搜索人气和搜索热度', fontproperties=font_prop)
plt.xticks(fontproperties=font_prop, rotation=45, ha='right')
plt.legend(prop=font_prop)
plt.tight_layout()

output_image_trend = os.path.join(output_folder, '土鸡搜索趋势.png')
plt.savefig(output_image_trend, dpi=300, bbox_inches='tight')
plt.close()
print(f"搜索词“土鸡”近30天的搜索趋势图表已保存到 {output_image_trend}")

# 将最终结果汇总成一个Excel文件
final_output_excel = os.path.join(output_folder, '土鸡搜索数据分析.xlsx')

# 创建一个ExcelWriter对象，用于将多个DataFrame写入同一个Excel文件的不同工作表中
with pd.ExcelWriter(final_output_excel, engine='xlsxwriter') as writer:
    df_daily.to_excel(writer, sheet_name='每日数据', index=False)
    df_cities.to_excel(writer, sheet_name='城市分布', index=False)
    df_gender.to_excel(writer, sheet_name='性别分布', index=False)
    df_age.to_excel(writer, sheet_name='年龄段分布', index=False)
    
    # 插入图片到Excel工作表中
    worksheet = writer.sheets['每日数据']
    worksheet.insert_image('E2', output_image_trend)

print(f"所有数据分析结果已保存到 {final_output_excel}")

# 简答题分析
trend_analysis_result = f"""
### 搜索词“土鸡”的趋势分析及目标人群分析

#### 趋势分析：
根据提供的每日搜索人气和搜索热度数据，“土鸡”关键词的搜索量在3月9日至4月7日之间波动。整体来看，搜索热度和搜索人气呈现一定的正相关性，即搜索热度高的时候，搜索人气也相对较高。具体来说：
- 在3月26日，搜索热度达到了最高的12,905，而搜索人气也相应地达到了5,760。
- 相对较低的搜索热度出现在4月3日，为10,362；对应的搜索人气为4,724。
- 整体趋势显示，在3月底至4月初期间，搜索热度和人气有所回升，特别是在4月26日达到峰值后，随后略有下降但保持稳定。

#### 目标人群分析：
从人口统计数据来看：
- **城市分布**：搜索“土鸡”的用户主要集中在大城市如北京、上海、广州等一线城市，以及部分二线城市如成都、杭州等。
- **性别分布**：女性用户的搜索人气略高于男性用户（21,237 vs 21,714），但两者相差不大，说明“土鸡”这一关键词对男女都有吸引力。
- **年龄段分布**：25-29岁和30-34岁的年龄段搜索人气最高，分别为14,380和13,967，表明年轻成年人群体对“土鸡”的关注度更高。其次是18-24岁的年轻人和35-39岁的成年人，而40岁以上的人群搜索量相对较少。

综上所述，“土鸡”作为一个搜索关键词，在年轻成年人群体中有较高的关注度，尤其是在一线和部分二线城市中。商家可以考虑针对这些地区和年龄层进行更精准的营销活动。
"""

analysis_file_path = os.path.join(output_folder, '趋势分析.txt')
with open(analysis_file_path, 'w', encoding='utf-8') as file:
    file.write(trend_analysis_result)
print(f"趋势分析结果已保存到 {analysis_file_path}")